@贝壳儿
3年前 提问
1个回答

怎么设置 Nginx 子目录伪静态

齐士忠
3年前

一、LNMP:Nginx二级目录伪静态

1、只需要添加这个二级目录的伪静态就可以了,这里以LNMP环境的 nginx.conf 配置文件为例子;

只需要添加如下代码:

location /二级网站目录/ {
  index index.html index.php;
  if (-f $request_filename/index.html){
  rewrite (.*) $1/index.html break;
  }

  if (-f $request_filename/index.php){
  rewrite (.*) $1/index.php;
  }

  if (!-f $request_filename){
  rewrite (.*) /二级网站目录/index.php;
  }
  }

2、重启nginx;

注意:LNMP的Nginx下面也有很多类似的伪静态配置文件,我们也可以直接 include 有引入。

例如:wordpress.conf、wp2.conf、dedecms.conf、discuz.conf 、ecshop.conf……等等,如下图:

图片

二、宝塔面板:Nginx二级目录伪静态

注意:如果你用的是宝塔面板,你用第一种上面的伪静态规则,是会报类似如下这样的错误:

nginx: [emerg] unknown directive “  index” in

/www/server/panel/vhost/rewrite/www. xxx.com.conf:7

nginx: configuration file /www/server/nginx/conf/nginx.conf test failed

图片

如果你用的是宝塔面板,你的伪静态只需要直接选择“wp2“即可!

这里很多人或许会有疑问?宝塔伪静态wordpress与wp2的区别是什么?答案是:wordpress 是标准的伪静态,wp2 是代表的把 WordPress 装在子目录的伪静态。

图片

rewrite ^.*/files/(.*)$ /wp-includes/ms-files.php?file=$1 last;
if (!-e $request_filename){
    rewrite ^.+?(/wp-.*) $1 last;
    rewrite ^.+?(/.*\.php)$ $1 last;
    rewrite ^ /index.php last;
}

三、Nginx try_files实现二级目录伪静态

当然,也可以用以下代码实现伪静态。至于 try_files 和 rewrite 哪个效率更高?目前不得而知,需要做进一步的了解。

location /fujieace/ {
  index  index.php;
  try_files $uri $uri/ /fujieace/index.php?$args;
}

或者可以直接采用 LNMP 程序下的配置文件:wp2.conf;

location /cmp/ {
        try_files $uri $uri/ /cmp/index.php?$args;
}

# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

总结:

有一点大家需要注意,现在nginx配置分为 http 和 https两个地方,有时候很多人把配置伪静态规则 放在的是 http server中的,结果 https server中却忘记了配置,恰好他的网站又是以https为主的,这样的话,会造成就算你重新加载了nginx配置后,伪静态规则却不会生效。